package com.wuzao.T;

/**
 * <p>
 * 1、泛型的本质是为了参数化类型，也就是在在  不创建新的类型的情况  下，通过泛型指定的不同类型来控制形参具体限制的类型，很明显这种方法提高了代码的复用性。
 *
 * 2、泛型的引入提高了安全性，泛型提供了  编译时类型安全检测机制  ，该机制允许开发者在编译时检测到非法的类型。。
 *
 * 3、在没有泛型的情况的下，通过对类型 Object 的引用来实现参数的“任意化”，“任意化”带来的缺点是要做  显式  的强制类型转换，而这种转换是要求开发者对实
 * 际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况，编译器可能不提示错误，在运行的时候才出现异常，这是本身就是一个安全隐患。
 * </p>
 *
 * @author wuzuhao
 * @since 2023-08-03
 */
public class GlmapperGeneric<T> {
    private T t;
    public void set(T t) { this.t = t; }
    public T get() { return t; }

    public static void main(String[] args) {
        // do nothing
        noSpecifyType();
        specifyType();
    }

    /**
     * 不指定类型
     */
    public static void noSpecifyType(){
        GlmapperGeneric glmapperGeneric = new GlmapperGeneric();
        glmapperGeneric.set("test");
        // 需要强制类型转换
        String test = (String) glmapperGeneric.get();
        System.out.println(test);
    }

    /**
     * 指定类型
     */
    public static void specifyType(){
        GlmapperGeneric<String> glmapperGeneric = new GlmapperGeneric();
        glmapperGeneric.set("test");
        // 不需要强制类型转换
        String test = glmapperGeneric.get();
        System.out.println(test);
    }
}
